package negocio;

import java.security.MessageDigest;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Verificacion {

	
	  public static String encriptarContrasenia(String contrasenia) 
	  {
		    MessageDigest digest = null;
		    byte[] hashdecontraseniaencriptada = null;

		    try {
		    	//se elige algoritmo de encriptacion en java, existen varios. 
		      digest = MessageDigest.getInstance("SHA-512");
		      
		      //convierte string de la contrasenia a un arreglo de bytes, aplicando el algoritmo de Java elegido
		      hashdecontraseniaencriptada = digest.digest(contrasenia.getBytes("UTF-8"));
		    } catch (Exception e) {}

		    // se procede a construir un String que contenga en valor hexadecimal el contenido del arreglo de bytes, 
		    // porque este nuevo string se utilizara luego para insertar la contrasenia encriptada en la BD.
		    String contraseniaencriptadahexadecimal = "";
		    
		    for (int i = 0; i < hashdecontraseniaencriptada.length; i++) 
		    {  
		      String stringhexadecimal = Integer.toHexString(0xff & hashdecontraseniaencriptada[i]);
		      if (stringhexadecimal.length() == 1) {
		        contraseniaencriptadahexadecimal += '0';
		      }
		      contraseniaencriptadahexadecimal += stringhexadecimal;
		    }

		    return contraseniaencriptadahexadecimal;
		  }
	
	  
	  //validacion por medio de expresiones regulares
	  public static boolean esMailValido(String mail) {
		    return mail.matches("^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$");
		  }
	  
	  //TODO: DESARROLLAR (estado: pendiente) validacion por medio de expresiones regulares
	  public static boolean esDNIValido(String dni) {
		    String patternEmail = " DESARROLLAR";
		    Pattern pattern = Pattern.compile(patternEmail);
		    Matcher matcher = pattern.matcher(dni);
		    return matcher.matches();
		  }
	  
	
	  static public boolean onlyPalabraSinNumero(String palabra) {
	        boolean resultado = true;
	        for(Integer i=0;i<10;i++){
	            if(palabra.contains(i.toString())){
	                resultado=false;
	                return resultado;
	            }
	        }
	        return resultado;
	    }
	    
	    static public boolean onlyNumeroSinLetras(String palabra){
	        boolean retorno= true;
	        try{
	            if(!palabra.isEmpty()){
	                Integer numero=new Integer (palabra.replaceAll(" +", ""));
	                retorno=true;
	            }
	            else{
	                return true;
	            }
	        }
	       catch(Exception e) {
	           retorno=false;        
	         }
	        return retorno;
	    }
	            
	    
	    static public String onlyRemoveEspaciosInnecesarios(String palabra){
	        String nuevaPalabra=palabra.trim();
	        nuevaPalabra=nuevaPalabra.replaceAll(" +", " ");
	        return nuevaPalabra;
	    }
	    
	    
	    
	    public static boolean SoloNumeros(String numero) {
	        try{
	            Integer num=Integer.valueOf(numero);
	            return true;
	        } catch(Exception e){
	            return false;
	        }
	    }
	    
	    
	    //util.date
	   public static boolean onlyFecha1EsMayorAFecha2(Date f1, Date f2)
	   {
		//TODO: BUG: falta desarrollar
		return false;
		
	   }
	
	
}
